package org.example.blogserver.handler;

import org.example.blogserver.dao.SysUserDao;
import org.example.blogserver.utils.JWTUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class TokenManagerImpl implements TokenManager {

    private static final long TOKEN_EXPIRATION_TIME = 1; // token 过期时间，单位：天

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private SysUserDao sysUserDao;

    @Override
    public String generateToken(String account) {
        String token = JWTUtils.createToken(Long.valueOf(account));
        // 存储到 Redis 中，并设置过期时间
        redisTemplate.opsForValue().set(token, account, TOKEN_EXPIRATION_TIME, TimeUnit.DAYS);
        return token;
    }

    @Override
    public boolean isValidToken(String token) {
        // 从 Redis 中查询 token 是否存在
        return redisTemplate.hasKey(token);
    }

    @Override
    public String getAccountFromToken(String token) {
        // 从 Redis 中获取 token 对应的账号
        return redisTemplate.opsForValue().get(token);
    }

    @Override
    public void deleteToken(String token) {
        // 从 Redis 中删除 token
        redisTemplate.delete(token);
    }

}
